package cn.zn.modules.pz.cur.service;

import cn.zn.framework.common.utils.PageUtils;
import cn.zn.modules.pz.cur.entity.TpMain;
import cn.zn.modules.pz.cur.entity.dto.PzBudgetDTO;
import cn.zn.modules.pz.cur.entity.dto.PzDetailDTO;
import cn.zn.modules.pz.cur.entity.dto.PzQueryDTO;
import cn.zn.modules.pz.enums.SpendingTypeEnum;
import cn.zn.modules.pz.his.entity.dto.IPzDTO;
import cn.zn.modules.pz.his.entity.vo.*;
import cn.zn.modules.pz.inter.vo.PzForInvoiceVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

public interface TpMainService extends IService<TpMain> {

    /**
     * 保存现金/非现金
     * @param id
     * @param isCash
     */
    void saveMoneyType(String id, Boolean isCash);

    /**
     * 查询分页
     *
     * @param dto 查询条件
     * @return
     */
    PageUtils queryPage(PzQueryDTO dto);

    /**
     * 查询预约的主表信息
     *
     * @param mainId
     * @return
     */
    TpMain findByAppontMainId(String mainId);

    /**
     * 查询详情
     *
     * @param pzDetailDTO
     * @return
     */
    IPz findDetail(PzDetailDTO pzDetailDTO);

    /**
     * 查询预算
     *
     * @param mainId
     * @return
     */
    List<PzBudgetVO> findBudgetByMainId(String mainId);

    /**
     * 查询预算信息
     *
     * @param id
     * @param mainId
     * @return
     */
    PzBudgetVO findBudgetByIdAndMainId(String id, String mainId);

    /**
     * 保存预算
     *
     * @param pzBudgetDTO
     */
    void saveBudget(PzBudgetDTO pzBudgetDTO);

    /**
     * 删除预算
     *
     * @param mainId
     * @param ids
     */
    void deleteBudget(String mainId, List<String> ids);

    /**
     * 查询经费
     *
     * @param mainId
     * @return
     */
    @Deprecated
    List<PzMoneyVO> findMoneyByMainId(String mainId);

    /**
     * 查询支付
     *
     * @param mainId
     * @return
     */
    List<PzPayVO> findPayByMainId(String mainId);

    /**
     * 查询票据信息
     *
     * @param mainId
     * @return
     */
    PzTicketVO findTicket(String mainId);

    /**
     * 新增申请单
     *
     * @param applyType     单据类型
     * @param applyUserCode 申请人编号
     * @return
     */
    IPz newApply(String applyType, String applyUserCode);

    /**
     * 保存申请信息
     *
     * @param iPzDTO
     */
    void saveApply(IPzDTO iPzDTO);

    /**
     * 查询待报账单数
     *
     * @param userCode
     * @return
     */
    long findCountToAppoint(String userCode);

    /**
     * 保存委托
     *
     * @param mainId
     * @param authToUserCode
     */
    void saveAuth(String mainId, String authToUserCode);

    /**
     * 由请示生成报销单
     *
     * @param mainId
     * @param spendingTypeEnum 指定经费类型（目前仅补登）
     * @return mainId
     */
    String saveForExpense(String mainId, SpendingTypeEnum spendingTypeEnum);

    /**
     * 保存合并报销
     *
     * @param mainIds
     * @param applyUser
     * @param applyDept
     * @return
     */
    String saveForExpenseMerge(String[] mainIds, String applyUser, String applyDept);

    /**
     * 保存还款
     *
     * @param mainId
     * @return
     */
    String saveForRepay(String mainId);

    /**
     * 查询单据信息（发票编辑）
     *
     * @param applyCode
     * @return
     */
    PzForInvoiceVO findPzForInvoice(String applyCode);

    /**
     * 单据统计
     *
     * @return
     */
    Map<String, Object> queryStatistical();

    /**
     * 处理平均时长
     *
     * @return
     */
    Map<String, Object> queryAvgForDealTime();

    /**
     * 得到当前财政年度
     * @return
     */
    Integer curFinancialYear();

    /**
     * 查询预约处理数
     * @return
     */
    Long queryAppointDeal();
}


